2010年07月02日
川俣晶の縁側ソフトウェア技術雑記 total 4124 count

IIS 7.5で禁止したはずの入力バリデーションが実行される場合の対策

Written By: 川俣 晶連絡先

 IISには悪意がある入力を事前に禁止するための機能が存在します。しかし、正常な仕様の使い方であってもしばしば入力を遮断してしまい、問題を引き起こします。

 これを禁止するには@PageディレクティブにValidateRequest="false"などを追加していました。

 しかし、IIS 7.5では(もうちょっと前からかもしれない)、これでもバリデーション機能が禁止されません。つまり、既に禁止許可を明示的に指定してあっても、OSをアップグレードするだけで動作が非互換になります。

原因 §

 安全を確認してわざわざ許可しているのに考えにくいことですが、セキュリティの締め付けが厳しくなって、許可しているのに許可されない状態で動くようになっています。従って、@Page、web.config、machine.configのレベルで許可しても制限されてしまいます。

対策 §

 Web.config等に以下を入れるとバリデーションを禁止できるようになります。(バリデーション禁止が許可されるのであって、これで禁止されるわけではない)

  • <httpRuntime requestValidationMode="2.0" />

感想 §

 もともと正規の入力を弾いて迷惑すぎる機能だったのに、更に迷惑がパワーアップしている感じですね。しかも、たまたまそのシーケンスが含まれる入力を行うまでうっかりすると気づかないので、更に迷惑大。今回も、やっとできあがったとホッとした直後にそのシーケンスの入力に当たって、大迷惑。